from .models import Faculty


def get_second_faculty_by_perms(user, faculty_data=None, add_both=False):
    """
    获取用户有权限查看的二级单位
    :param user: Account对象
    :param faculty_data: 二级单位数据，可不填，默认获取全部二级单位数据
    :param add_both: 返回的二级单位是否加上全部，默认为否
    :return:
    """
    if faculty_data is None:
        first_faculty_codes = Faculty.objects.filter(parent_code__isnull=True)\
            .exclude(faculty_title__in=('其它', '其他')) \
            .values_list('faculty_code', flat=True)
        faculty_data = Faculty.objects \
            .filter(parent_code__in=first_faculty_codes) \
            .values('faculty_code', 'faculty_title')

    res_data = list(faculty_data)

    # 超级管理员，返回全部二级单位
    tmp = {'faculty_code': 'view_all_second_faculty', 'faculty_title': '全部'}
    if user.is_superuser:
        if add_both:
            res_data.insert(0, tmp)
            return res_data
        return res_data

    all_perms = user.get_all_perms()  # 获取全部权限

    # 有权限看到全部的，返回全部二级单位
    if 'view_all_second_faculty' in all_perms:
        if add_both:
            res_data.insert(0, tmp)
            return res_data
        return res_data

    # 只能查看部分二级单位的，返回能查看的单位
    res_data = []
    for i in faculty_data:
        if i['faculty_code'] in all_perms:
            res_data.append(i)

    return res_data
